/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package model.fachada;
import java.util.List;
import javax.persistence.NoResultException;
import javax.persistence.PersistenceException;
import model.cliente.Cliente;
import model.encomendaproduto.EncomendaProduto;
import model.estoque.Estoque;
import model.excecoes.ErroDAOException;
import model.excecoes.ErroNegocioException;
import model.fornecedor.Fornecedor;
import model.funcionario.Funcionario;
import model.interfaces.IFachada;
import model.perfil.Perfil;
import model.produto.Produto;
import model.vendavista.VendaVista;
import model.cliente.NegocioCliente;
import model.encomendaproduto.NegocioEncomendaProduto;
import model.estoque.NegocioEstoque;
import model.fornecedor.NegocioFornecedor;
import model.produto.NegocioProduto;
import model.funcionario.NegocioFuncionario;
import model.perfil.NegocioPerfil;
import model.vendavista.NegocioVendaVista;
/**
 *
 * @author Marcos
 */
public class Fachada implements IFachada{
   private static Fachada inst = null;
   private NegocioCliente negocioCliente = null;
   private NegocioEncomendaProduto negocioEncomenda = null;
   private NegocioEstoque negocioEstoque = null;
   private NegocioFornecedor negocioFornecedor = null;
   private NegocioFuncionario negocioFuncionario = null;
   private NegocioPerfil negocioPerfil = null;
   private NegocioProduto negocioProduto = null;
   private NegocioVendaVista negocioVenda = null;
   
   private Fachada(){
       negocioCliente = new NegocioCliente();
       negocioEncomenda = new NegocioEncomendaProduto();
       negocioEstoque = new NegocioEstoque();
       negocioFornecedor = new NegocioFornecedor();
       negocioFuncionario = new NegocioFuncionario();
       negocioPerfil = new NegocioPerfil();
       negocioProduto = new NegocioProduto();
       negocioVenda = new NegocioVendaVista();
   }
   
   public static Fachada getInstanciaSingleton(){
       if(inst == null){
           inst = new Fachada();
       }
       return inst;
   }

   //Métodos do Cliente
    @Override
    public void cadastrarCliente(Cliente cliente) throws ErroDAOException, ErroNegocioException, PersistenceException, NoResultException {
        negocioCliente.cadastrarCliente(cliente);
    }

    @Override
    public void alterarCliente(Cliente cliente) throws ErroDAOException, ErroNegocioException, PersistenceException, NoResultException {
        negocioCliente.alterarCliente(cliente);
    }

    @Override
    public void excluirCliente(Cliente cliente) throws ErroDAOException, ErroNegocioException, PersistenceException, NoResultException {
        negocioCliente.excluirCliente(cliente);
    }

    @Override
    public List<Cliente> listarCliente(String consulta, String campo) throws ErroDAOException, ErroNegocioException, PersistenceException, NoResultException {
        return negocioCliente.listarCliente(consulta, campo);
    }

    @Override
    public boolean logarCliente(String login, String senha) throws ErroDAOException, ErroNegocioException, PersistenceException, NoResultException {
        return negocioCliente.logarCliente(login, senha);
    }

    
    //Método da Encomenda do Produto
    @Override
    public void registrarEncomendaProduto(EncomendaProduto encomenda) throws ErroDAOException, ErroNegocioException, PersistenceException, NoResultException {
        negocioEncomenda.registrarEncomendaProduto(encomenda);
    }

    @Override
    public void alterarEncomendaProduto(EncomendaProduto encomenda) throws ErroDAOException, ErroNegocioException, PersistenceException, NoResultException {
        negocioEncomenda.alterarEncomendaProduto(encomenda);
    }

    @Override
    public void excluirEncomendaProduto(EncomendaProduto encomenda) throws ErroDAOException, ErroNegocioException, PersistenceException, NoResultException {
        negocioEncomenda.excluirEncomendaProduto(encomenda);
    }

    @Override
    public List<EncomendaProduto> listarEncomenda(String consulta, String campo) throws ErroDAOException, ErroNegocioException, PersistenceException, NoResultException {
        return negocioEncomenda.listarEncomenda(consulta, campo);
    }

    @Override
    public int identificarCodigoProduto(String descricao, String marca) throws ErroDAOException, ErroNegocioException, PersistenceException, NoResultException {
        return negocioEncomenda.identificarCodigoProduto(descricao, marca);
    }

    
    //Métodos do Estoque
    
    @Override
    public void cadastrarProdutoEstoque(Estoque estoque) throws ErroDAOException, ErroNegocioException, PersistenceException, NoResultException {
        negocioEstoque.cadastrarProdutoEstoque(estoque);
    }

    @Override
    public void alterarProdutoEstoque(Estoque estoque) throws ErroDAOException, ErroNegocioException, PersistenceException, NoResultException {
        negocioEstoque.alterarProdutoEstoque(estoque);
    }

    @Override
    public void excluirProdutoEstoque(Estoque estoque) throws ErroDAOException, ErroNegocioException, PersistenceException, NoResultException {
        negocioEstoque.excluirProdutoEstoque(estoque);
    }

    @Override
    public List<Estoque> listarEstoque(String consulta, String campo) throws ErroDAOException, ErroNegocioException, PersistenceException, NoResultException {
        return negocioEstoque.listarEstoque(consulta, campo);
    }

    @Override
    public int identificarCodigoProduto2(String descricao, String marca) throws ErroDAOException, ErroNegocioException, PersistenceException, NoResultException {
        return negocioEstoque.identificarCodigoProduto(descricao, marca);
    }

    //Métodos do Fornecedor do Produto
    
    @Override
    public void cadastrarFornecedor(Fornecedor fornecedor) throws ErroDAOException, PersistenceException, NoResultException, ErroNegocioException {
        negocioFornecedor.cadastrarFornecedor(fornecedor);
    }

    @Override
    public void alterarFornecedor(Fornecedor fornecedor) throws ErroDAOException, PersistenceException, NoResultException, ErroNegocioException {
        negocioFornecedor.alterarFornecedor(fornecedor);
    }

    @Override
    public void excluirFornecedor(Fornecedor fornecedor) throws ErroDAOException, PersistenceException, NoResultException, ErroNegocioException {
        negocioFornecedor.excluirFornecedor(fornecedor);
    }

    @Override
    public List<Fornecedor> listarFornecedor(String consulta, String campo) throws ErroDAOException, PersistenceException, NoResultException, ErroNegocioException {
        return negocioFornecedor.listarFornecedor(consulta, campo);
    }

    
    //Métodos do Funcionário
    
    @Override
    public void cadastrarFuncionario(Funcionario funcionario) throws ErroDAOException, PersistenceException, NoResultException, ErroNegocioException {
        negocioFuncionario.cadastrarFuncionario(funcionario);
    }

    @Override
    public void alterarFuncionario(Funcionario funcionario) throws ErroDAOException, PersistenceException, NoResultException, ErroNegocioException {
        negocioFuncionario.alterarFuncionario(funcionario);
    }

    @Override
    public void excluirFuncionario(Funcionario funcionario) throws ErroDAOException, PersistenceException, NoResultException, ErroNegocioException {
        negocioFuncionario.excluirFuncionario(funcionario);
    }

    @Override
    public List<Funcionario> listarFuncionario(String consulta, String campo) throws ErroDAOException, PersistenceException, NoResultException, ErroNegocioException {
        return negocioFuncionario.listarFuncionario(consulta, campo);
    }

    @Override
    public Funcionario logarFuncionario(String login, String senha) throws ErroDAOException, PersistenceException, NoResultException, ErroNegocioException {
        return negocioFuncionario.logarFuncionario(login, senha);
    }
    
    //Métodos do Perfil do Cliente

    @Override
    public void cadastrarPerfil(Perfil perfil) throws ErroDAOException, PersistenceException, ErroNegocioException, NoResultException {
        negocioPerfil.cadastrarPerfil(perfil);
    }

    @Override
    public void alterarPerfil(Perfil perfil) throws ErroDAOException, PersistenceException, ErroNegocioException, NoResultException {
        negocioPerfil.alterarPerfil(perfil);
    }

    @Override
    public void excluirPerfil(Perfil perfil) throws ErroDAOException, PersistenceException, ErroNegocioException, NoResultException {
        negocioPerfil.excluirPerfil(perfil);
    }

    @Override
    public List<Perfil> listarPerfil(String consulta, String campo) throws ErroDAOException, PersistenceException, ErroNegocioException, NoResultException {
        return negocioPerfil.listarPerfil(consulta, campo);
    }

    @Override
    public int identificarCodigoCliente(String cpf, String nome) throws ErroDAOException, PersistenceException, ErroNegocioException, NoResultException {
        return negocioPerfil.identificarCodigoCliente(cpf, nome);
    }
    
    
    //Métodos do Produto

    @Override
    public void cadastrarProduto(Produto produto) throws ErroDAOException, ErroNegocioException, PersistenceException, NoResultException {
        negocioProduto.cadastrarProduto(produto);
    }

    @Override
    public void alterarProduto(Produto produto) throws ErroDAOException, ErroNegocioException, PersistenceException, NoResultException {
        negocioProduto.alterarProduto(produto);
    }

    @Override
    public void excluirProduto(Produto produto) throws ErroDAOException, ErroNegocioException, PersistenceException, NoResultException {
        negocioProduto.excluirProduto(produto);
    }

    @Override
    public List<Produto> listarProduto(String consulta, String campo) throws ErroDAOException, ErroNegocioException, PersistenceException, NoResultException {
        return negocioProduto.listarProduto(consulta, campo);
    }

    //Métodos da Venda à Vista
    
    @Override
    public void registrarVendaVista(VendaVista venda) throws ErroDAOException, PersistenceException, NoResultException, ErroNegocioException {
        negocioVenda.registrarVendaVista(venda);
    }

    @Override
    public void alterarVendaVista(VendaVista venda) throws ErroDAOException, PersistenceException, NoResultException, ErroNegocioException {
        negocioVenda.alterarVendaVista(venda);
    }

    @Override
    public void excluirVendaVista(VendaVista venda) throws ErroDAOException, PersistenceException, NoResultException, ErroNegocioException {
        negocioVenda.excluirVendaVista(venda);
    }

    @Override
    public List<VendaVista> listarVenda(String consulta, String campo) throws ErroDAOException, PersistenceException, NoResultException, ErroNegocioException {
        return negocioVenda.listarVenda(consulta, campo);
    }

    @Override
    public int identificarProduto(String descricao, String marca) throws ErroDAOException, PersistenceException, NoResultException, ErroNegocioException {
        return negocioVenda.identificarProduto(descricao, marca);
    }
}
